From a6aac77d16bb7d5683bc7f67ac96f88e6ab177e3 Mon Sep 17 00:00:00 2001 From: Aryeh Gregor Date: Fri, 13 Aug 2010 21:39:51 +0000 Subject: [PATCH] Revert r70960 "AjaxDispatcher, now ~30 lines shorter and not using $_GET or $_POST" Broke CategoryTree, see code review for the error message. --- includes/AjaxDispatcher.php | 48 +++++++++++++++++++++++++++++-------- index.php | 2 +- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/includes/AjaxDispatcher.php b/includes/AjaxDispatcher.php index 969efa4790..16e5301180 100644 --- a/includes/AjaxDispatcher.php +++ b/includes/AjaxDispatcher.php @@ -18,23 +18,51 @@ require_once( 'AjaxFunctions.php' ); * @ingroup Ajax */ class AjaxDispatcher { + /** The way the request was made, either a 'get' or a 'post' */ + private $mode; + /** Name of the requested handler */ - private $func_name = null; + private $func_name; /** Arguments passed */ - private $args = array(); + private $args; /** Load up our object with user supplied data */ - public function __construct( WebRequest $req ) { + function __construct() { wfProfileIn( __METHOD__ ); - $rs = $req->getVal( 'rs' ); - if( $rs !== null ) { - $this->func_name = $rs; + $this->mode = ""; + + if ( ! empty( $_GET["rs"] ) ) { + $this->mode = "get"; } - $rsargs = $req->getVal( 'rsargs' ); - if( $rsargs !== null ) { - $this->args = $rsargs; + + if ( !empty( $_POST["rs"] ) ) { + $this->mode = "post"; + } + + switch( $this->mode ) { + case 'get': + $this->func_name = isset( $_GET["rs"] ) ? $_GET["rs"] : ''; + if ( ! empty( $_GET["rsargs"] ) ) { + $this->args = $_GET["rsargs"]; + } else { + $this->args = array(); + } + break; + case 'post': + $this->func_name = isset( $_POST["rs"] ) ? $_POST["rs"] : ''; + if ( ! empty( $_POST["rsargs"] ) ) { + $this->args = $_POST["rsargs"]; + } else { + $this->args = array(); + } + break; + default: + wfProfileOut( __METHOD__ ); + return; + # Or we could throw an exception: + # throw new MWException( __METHOD__ . ' called without any data (mode empty).' ); } wfProfileOut( __METHOD__ ); @@ -48,7 +76,7 @@ class AjaxDispatcher { function performAction() { global $wgAjaxExportList, $wgOut; - if ( is_null( $this->func_name ) ) { + if ( empty( $this->mode ) ) { return; } diff --git a/index.php b/index.php index 9f45c59172..dcea36b5b7 100644 --- a/index.php +++ b/index.php @@ -68,7 +68,7 @@ wfProfileOut( 'main-misc-setup' ); # if( $wgUseAjax && $action == 'ajax' ) { require_once( $IP . '/includes/AjaxDispatcher.php' ); - $dispatcher = new AjaxDispatcher( $wgRequest ); + $dispatcher = new AjaxDispatcher(); $dispatcher->performAction(); $mediaWiki->restInPeace(); exit; -- 2.20.1